iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 21
1

今天我們要進入到 Day 21 也就是開始探討一些第一部分與第二部分的實務應用的一些狀況,我已經被鐵人賽摧殘只剩下意志力了哈哈,所以我就盡可能地多分享一些個人工作上的一些經驗,也就是一些財務時間序列在類神經網路上的應用。

此外最後也會談一下最近很夯的 AlphaGo 進化版,主要是討論一個觀念就是模型壓縮,也是專文小段落回饋海綿寶寶大大的支持。

訓練與測試樣本的選擇

對於許多人在類神經網路中針對一般的資料去做訓練,可能很自然地將訓練樣本與測試樣本做一個比例分配,在時間序列資料中有一個主要困難是,因為你的模型可能持續要上線去用,你的資料複雜度可能隨著你累積的資料越來越大,可能會提升,也可能會下降,因此每次重新訓練的時候,訓練和測試樣本可能是不一樣大。

對於初學者來說,針對你要解決的問題實際去選擇各種訓練資料的大小,然後建議是在你覺得要重新訓練的最大可能期間去做測試,舉例來說,假設我訓練出一個模型來預測下一小時的股價,那對於你來說你可能會每天重新訓練一次模型,假設開盤六小時,那你就可能每六小時要重新訓練一次資料,那你的測試樣本就盡量用最大的六小時去測試。

訓練樣本的問題主要是你不知道你要選擇多長期間的時間序列做訓練,這通常會有個 Trade-off 如果你用一般類似梯度下降法之類的方法,可能你從最頭的資料一路修正權重到最後,然後再來一遍,通常只要你的學習率和神經元夠多,你應該都可以訓練得起來,我的建議是用你能接受的極限-最小的學習率搭配最多的神經元(什麼算最小和最多,你得用你的時間成本做計算,一般如果你只是在測試,會抓三十分鐘到四小時的計算量,你的學習率可能是 0.05 神經元可能是 30 ,這只是我隨意舉例)去測試你認為你可能需要的最大訓練樣本。

如果你訓練的起來,那就減少訓練樣本,直到你用你能接受的最小的學習率和最多的神經元訓練不起來了,例如他的 MSE 下不去了,在開始把學習率提高和降低神經元。當然這還倚賴你的資料維度,如果資料維度怕太大,你可以考慮用 RNN 我前面沒有討論也說了很多 RNN 的壞話,但如果你的時間序列很有可能存在週期性或是前後關係,RNN 也能減少你的模型複雜度,你可以測試在這樣的情況下用最小的學習率和最大的神經元來抓訓練樣本的大小。

我的答案依然是會被人討厭的那句話,你得根據你要解決的問題來定,因為你的問題會帶來你的資料在隨著時間繼續走下去之後複雜度是否會變,如果複雜度不太會變,簡單來說一個工廠的生產、能源的傳輸問題等,那就還好。但如果你是要處理社會科學、大尺度交通或地理分析,那可能隨著你的資料累積越來越大,其中的非線性或是極端值會開始越來越多,所以這就是為什麼我討厭 one-off 你不應該成為那種別人給你一筆資料你就訓練一個模型給別人這種,像是速食店一樣的資料分析方法,而是要建立一個能持續追蹤,能持續調整訓練和測試樣本的你的問題的解決流程。

關於 AlphaGo

我不會下圍棋,也對於這種專門處理 rule-based 的問題不是很擅長,但是我應該可以分享幾個小觀念給不太懂的朋友理解一下,近期人工智慧的發展,我一向都自稱是研究類神經網路,因為機器學習和人工智慧都是涵蓋很廣的科目,那在類神經網路領域中,被人詬病的問題就是訓練成本太高,這個成本可能是時間也可能是計算資源,計算資源並不一定等價於時間,計算資源還有分布式計算的通訊成本等。

你可以找到很多 AlphaGo 的文章都會提到 CNN 和蒙地卡羅搜尋,簡單理解就是 AlphaGo 有一個強硬暴力的在一些條件下去猜測未來所有可能,然後還有一個去決定要在什麼條件底下去做猜測的衡量基準。這邊我覺得有一個很重要的概念就是「模型壓縮」。

模型壓縮的簡單理解就是,由於你沒辦法暴力猜測所有的可能,或是你保守估計模型要能匹配你給定的資料並解決問題需要非常高的複雜度的時候,你需要使用的一個方法。現在多數在各個領域中能實際解決問題的類神經網路,往往都是有搭配一種模型壓縮的資料預處理或是在模型中實現壓縮。

我講個自己工作上的例子,彭博是一個很有名的金融資訊新聞平台,它裡面也同時可以當作一個交易平台去使用,在彭博的系統中有很多數值運算去計算各種你在平台中想買的金融商品組合的合理價格,大部分都和利率和折現有關的債券商品,而這些合理價格可能都需要透過二項樹去做計算,但是實際上二項樹去做計算,把所有金融市場的風險去做仔細考量會造成很大的計算量,所以在二項樹計算上就有一些簡化計算量的方法,那現在機器學習領域就是發展到大概這樣的階段。

實務上能用的各種錦囊妙計,我覺得大部分都是從模型壓縮出發,因為你會有很多資源限制。但重點就是怎麼找到一個適合自己問題的模型壓縮方法就很重要,AlphaGo 由於主要面對的是 rule-based 的問題,而面對的情況又是存在局部區域關聯性大(下棋的位置和附近的棋有關係)所以用 CNN 和蒙地卡羅來做會不錯。

那金融資料呢?我知道很多人會很好奇,我個人的建議是如果你要對金融資料的類神經網路模型進行模型壓縮,一定要針對「噪音」去做處理,我能給的兩個小東西就是嘗試使用其他編碼方式對價格或各種金融資料去做編碼,或是使用 renko chart 的方法去對時域做扭曲,我個人比較不喜歡使用傅立葉或是小波轉換來處理,原因是這樣處理完的資料在類神經網路中比較沒辦法訓練起來。

實際上模型壓縮有太多東西可以玩了,關鍵還是你要解決的問題,還有你對問題面對的資料認識的程度。


上一篇
DAY 20 - 第二部分總結與延伸思考
下一篇
DAY 22 - 資料預處理與標準化
系列文
類神經網路搭配啟發式演算法於時間序列之應用27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言